/* * Copyright (C) 2014 IUH �yber$oft Team * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package vn.cybersoft.obs.android.activities; import vn.cybersoft.obs.android.R; import vn.cybersoft.obs.android.preference.ModePreference; import vn.cybersoft.obs.android.preference.RepeatPreference; import vn.cybersoft.obs.android.provider.TimeSchedule; import vn.cybersoft.obs.android.utilities.Log; import vn.cybersoft.obs.android.utilities.ToastManager; import android.app.AlertDialog; import android.app.TimePickerDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.text.format.DateFormat; import android.view.View; import android.widget.Button; import android.widget.TimePicker; import android.widget.Toast; /** * @author Luan Vu (hlvu.cybersoft@gmail.com) * */ public class SetTimeScheduleActivity extends PreferenceActivity implements TimePickerDialog.OnTimeSetListener, Preference.OnPreferenceChangeListener { public static final String KEY_ENABLED = "time_schedule_enabled"; public static final String KEY_TIME = "time_schedule"; public static final String KEY_REPEAT = "time_schedule_repeat"; public static final String KEY_MODE = "time_schedule_mode"; private CheckBoxPreference mEnabledPref; private Preference mTimePref; private RepeatPreference mRepeatPref; private ModePreference mModePref; private long mId; private int mHour; private int mMinutes; //private boolean mTimePickerCancelled; private TimeSchedule mOriginalSchedule; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Override the default content view. setContentView(R.layout.set_schedule_layout); addPreferencesFromResource(R.xml.time_schedule_prefs); mEnabledPref = (CheckBoxPreference) findPreference(KEY_ENABLED); mEnabledPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference p, Object newValue) { return SetTimeScheduleActivity.this.onPreferenceChange(p, newValue); } }); mTimePref = findPreference(KEY_TIME); mRepeatPref = (RepeatPreference) findPreference(KEY_REPEAT); mRepeatPref.setOnPreferenceChangeListener(this); mModePref = (ModePreference) findPreference(KEY_MODE); mModePref.setOnPreferenceChangeListener(this); Intent i = getIntent(); mId = i.getLongExtra(TimeSchedule.EXTRA_ID, -1); if (Log.LOGV) { Log.v("In SetTimeSchedule, schedule id = " + mId); } TimeSchedule schedule = null; if (mId == -1) { // No schedule id means create a new schedule. schedule = new TimeSchedule(); setTitle(getString(R.string.app_name) + " > " + getString(R.string.add_new_time_schedule)); } else { /* load schedule details from database */ schedule = TimeSchedule.getTimeSchedule(getContentResolver(), mId); setTitle(getString(R.string.app_name) + " > " + getString(R.string.edit_time_schedule)); // Bad schedule if (schedule == null) { finish(); return; } } mOriginalSchedule = schedule; updatePrefs(mOriginalSchedule); // We have to do this to get the save/cancel buttons to highlight on // their own. getListView().setItemsCanFocus(true); // Attach actions to each button. Button saveButton = (Button) findViewById(R.id.save); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mModePref.getModeId() != -1) { saveSchedule(); finish(); } else { createToast(SetTimeScheduleActivity.this, getString(R.string.save_schedule_mode_empty_err)); } } }); Button cancelButton = (Button) findViewById(R.id.cancel); cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); // The last thing we do is pop the time picker if this is a new alarm. if (mId == -1) { showTimePicker(); } } @Override protected void onDestroy() { super.onDestroy(); ToastManager.cancelToast(); } // Used to post runnables asynchronously. private static final Handler sHandler = new Handler(); public boolean onPreferenceChange(final Preference p, Object newValue) { // Asynchronously save the schedule since this method is called _before_ // the value of the preference has changed. sHandler.post(new Runnable() { public void run() { // Editing any preference (except enable) enables the schedule. if (p != mEnabledPref) { mEnabledPref.setChecked(true); } } }); return true; } private void updatePrefs(TimeSchedule schedule) { mId = schedule.id; mEnabledPref.setChecked(schedule.enabled); mHour = schedule.hour; mMinutes = schedule.minutes; mRepeatPref.setDaysOfWeek(schedule.daysOfWeek); mModePref.setModeId(schedule.modeId); updateTime(); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference == mTimePref) { showTimePicker(); } return super.onPreferenceTreeClick(preferenceScreen, preference); } /* @Override public void onBackPressed() { if (!mTimePickerCancelled) { saveSchedule(); } finish(); }*/ private void showTimePicker() { new TimePickerDialog(this, this, mHour, mMinutes, DateFormat.is24HourFormat(this)).show(); } @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMinutes = minute; updateTime(); // If the time has been changed, enable the schedule. mEnabledPref.setChecked(true); } private void updateTime() { if (Log.LOGV) { Log.v("updateTime " + mId); } mTimePref.setSummary(TimeSchedule.formatTime(this, mHour, mMinutes, mRepeatPref.getDaysOfWeek())); } private long saveSchedule() { TimeSchedule schedule = new TimeSchedule(); schedule.id = mId; schedule.enabled = mEnabledPref.isChecked(); schedule.hour = mHour; schedule.minutes = mMinutes; schedule.daysOfWeek = mRepeatPref.getDaysOfWeek(); schedule.modeId = mModePref.getModeId(); Log.i("In SetTimeSchedule ModeId: " + schedule.modeId); long time = 0; if (schedule.id == -1) { time = TimeSchedule.addTimeSchedule(this, schedule); mId = schedule.id; } else { time = TimeSchedule.setTimeSchedule(this, schedule); } return time; } private void deleteSchedule() { new AlertDialog.Builder(this) .setTitle(getString(R.string.delete_schedule)) .setMessage(getString(R.string.delete_schedule_confirm)) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface d, int w) { TimeSchedule.deleteTimeSchedule(SetTimeScheduleActivity.this, mId); finish(); } }) .setNegativeButton(android.R.string.cancel, null) .show(); } static void createToast(Context context, String message) { Toast toast = Toast.makeText(context, message, Toast.LENGTH_LONG); ToastManager.setToast(toast); toast.show(); } }